package
{
import core.log.GameLogger;
import core.module.ModuleManager;
import core.resources.InitResourceManager;
import core.resources.ResourceManagerBase;

import flash.display.Sprite;
import flash.events.Event;
import flash.events.ProgressEvent;

import framework.core.UIWidget;
import framework.core.popup.PopUpManager;


/**
 * Main
 * @author jliang
 *
 */
[Frame(factoryClass = "Preloader")]
[SWF(width = 760, height = 610, backgroundColor = 0x333333, frameRate = 30)]
public class Main extends Sprite implements IApp
{
	//==========================================================================
	//  Constructor
	//==========================================================================
	public function Main()
	{
		super();
		
		UIWidget.initialize();
	}
	//==========================================================================
	//  Variables
	//==========================================================================
	private var preloader:IPreloader;
	
	private var resource:ResourceManagerBase;
	//==========================================================================
	//  Public methods
	//==========================================================================
	public function init(preloader:IPreloader):void
	{
		this.preloader = preloader;
		
		resource = new InitResourceManager();
		resource.addEventListener(ProgressEvent.PROGRESS, resourceProgressHandler);
		resource.addEventListener(Event.COMPLETE, resourceReadyHandler);
		resource.start();
	}
	//==========================================================================
	//  Private methods
	//==========================================================================
	private function start(params:Object):void
	{
        GameLogger.setModuleManager(new ModuleManager());
        
		Game.instance.initialize(this, params);
        
        PopUpManager.initialize();
	}
	//==========================================================================
	//  Event handlers
	//==========================================================================
	private function resourceProgressHandler(event:ProgressEvent):void
	{
		preloader.updateProgress(20 + Math.round((event.bytesLoaded / event.bytesTotal) * 80));
	}
	
	private function resourceReadyHandler(event:Event):void
	{
        var params:Object = resource.params;
        
		if (resource)
		{
			resource.removeEventListener(ProgressEvent.PROGRESS, resourceProgressHandler);
			resource.removeEventListener(Event.COMPLETE, resourceReadyHandler);
			resource.dispose();
			resource = null;
		}
		
		preloader.updateProgress(100);
		
		if (preloader)
		{
			preloader.dispose();
			preloader = null;
		}
        
        start(params);
	}
}
}





